perm filename MIXBUT[MIX,SYS] blob
sn#020811 filedate 1972-02-29 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 This section requests the user to "push a button" and
00007 00003 QSTART: SETZB RJ, EXTIME EXTIME, RJ ← 0
00011 00004 QSETUP: SETZ 10,
00014 00005 RESCN routine to scan the rest of the line of TTY input looking an
00016 ENDMK
⊗;
COMMENT ⊗ This section requests the user to "push a button" and
then acts on that request.
⊗
↓BUTTON:
UPDATE
SETZM ERRORC
OUTSTR [ASCIZ ⊗
#⊗] ; PROMPT FOR BUTTON
MOVE 13, [POINT 7, 10] ; INITIALIZE BYTE POINTER
INCHWL 11 ; WAIT FOR LINE
ANDI 11,177 ;*RES* IGNORE CONTROL BITS
CAIN 11,14 ;*RES* IS THIS A FORM FEED
JRST QREWRT ;*RES* YES, REWRITE DD SCREEN
cain 11, 175 ; is it an <alt-mode>
jrst mixbug ; yes → go to the debugger
SKIPA 10, [0] ; CLEAR 10 AND SKIP
BUT0: INCHRW 11 ; GE NEXT CHAR
CAIL 11, "a" ; convert lower to upper
CAILE 11, "z"
SKIPA
SUBI 11, 40
CAIN 11,40 ;*RES* IS IT A BLANK
JRST .+6 ;*RES* YES
CAIN 11, 15 ; C-R → END OF BUTTON
JRST .+4
IDPB 11, 13 ; PUT CHAR INTO 10
TLNE 13, 760000 ; P=1 → 10 IS FULL
JRST BUT0
MOVE 11, BLIST
CAMN 10, BLIST(11) ; THIS BUTTON?
JRST .+3 ; YES → GO TO THIS ADDRESS
AOBJN 11, .-2 ; NO → IF BUTTONS LEFT, TRY THEM
JRST BUT1 ;*RES* TRY BUTTONS WITH ARGUMENTS
INCHRW 10 ; WAIT FOR L-F
CAIE 10, 12
JRST .-2
JRST @ALIST(11)
BUT1: MOVE 11,BLIST1 ;*RES* GET POINTER TO BUTTON LIST
CAMN 10,BLIST1(11)
JRST .+4 ;*RES* A MATCH
AOBJN 11,.-2
OUTSTR [ASCIZ /??/] ; FUNNY BUTTON
JRST BUTTON
JRST @ALIST1(11)
BLIST: XWD -ALIST+BLIST+1, 1
0
ASCII ⊗G⊗
ASCII ⊗GO⊗
ASCII ⊗S⊗
ASCII ⊗START⊗
ASCII ⊗L⊗
ASCII ⊗LOAD⊗
ASCII ⊗C⊗
ASCII ⊗CONT⊗
ASCII ⊗H⊗
ASCII ⊗HALT⊗
ASCII ⊗STEP⊗
ASCII ⊗X⊗
ASCII ⊗D⊗
ASCII ⊗DISP⊗
ASCII ⊗M⊗
ASCII ⊗MEM⊗
ASCII ⊗ZXT⊗
ASCII ⊗ZPC⊗
ASCII ⊗EXIT⊗
ASCII ⊗READX⊗
ASCII ⊗PNCHX⊗
ASCII ⊗PRNTX⊗
ASCII ⊗UPDAT⊗
ASCII ⊗PCMLD⊗
ASCII ⊗TRACX⊗
ASCII ⊗NOEJE⊗ ;*RES*
ASCII ⊗EJECT⊗ ;*RES*
ASCII ⊗NEWS⊗ ;*RES*
ASCII ⊗ERRHA⊗ ;*RES*
ASCII ⊗ERRGO⊗ ;*RES*
ASCII ⊗MJH⊗
ASCII ⊗DUM1⊗ ;*RES* IN CASE NEEDED FOR PATCH
ASCII ⊗DUM2⊗
ALIST: 0
BUTTON+1
QGO
QGO
QSTART
QSTART
QLOAD
QLOAD
QCONT
QCONT
QHALT
QHALT
QSTEP
QSTEP
QDISP
QDISP
QMEM
QMEM
QZXT
QZPC
QEXIT
QREADX
QPNCHX
QPRNTX
QUPDAT
QPCMLD
QRUNX
QNOEJ ;*RES*
QEJEC ;*RES*
QNEW ;*RES*
QERHLT ;*RES*
QERRGO ;*RES*
QMJH
QDUM
QDUM
BLIST1: XWD -ALIST1+BLIST1+1,1
ASCII ⊗READ⊗
ASCII ⊗PUNCH⊗
ASCII ⊗PRINT⊗
ASCII ⊗SETUP⊗
ASCII ⊗MIXLO⊗
ASCII ⊗MLD⊗
ASCII ⊗TRACE⊗
ASCII ⊗TK⊗
ASCII ⊗SETPC⊗
ASCII ⊗MIXAL⊗
ASCII ⊗DUMP⊗
ASCII ⊗DUM3⊗
ASCII ⊗DUM4⊗
ALIST1: 0
QREAD
QPUNCH
QPRINT
QSETUP
QMLD
QMLD
QRUN
QRUNC
QSETPC
MIXAL
QDUMP
QDUM
QDUM
QSTART: SETZB RJ, EXTIME ; EXTIME, RJ ← 0
MOVEI PC, MC0000 ; PC ← MC0000
JRST MIXMN1
QGO: MOVEI INSTR, 2044 ; THIS IS "IN 0(16)"
MOVEI PC, MC0000 ; SET PC TO ZERO
JRST MIXMN2 ; NOW EXECUTE THE "IN"
QLOAD: MOVEI INSTR, 2044 ; THIS IS "IN 0(16)"
TLO FLAGS, SIFLAG ; SET THE SINGLE-INSTRUCTION FLAG
JRST MIXMN2 ; NOW EXECUTE THE "IN"
QCONT: JRST MIXMN1 ; GO RIGHT TO WORK
QHALT: JRST BUTTON ; ESSENTIALLY A NO-OP
QSTEP: TLO FLAGS, SIFLAG ; SET SIFLAG
JRST MIXMN1
QZXT: SETZM EXTIME ; EXTIME ← 0
JRST BUTTON
QZPC: SETZ RJ, ; RJ ← 0
MOVEI PC, MC0000 ; PC ← MC0000
JRST BUTTON
QNOEJ: SETOM NOJECT ;*RES* WRITE OVER PERF ON
JRST BUTTON ;*RES* LPT
QEJEC: SETZM NOJECT ;*RES*
JRST BUTTON ;*RES*
NOJECT: 0
QERHLT: SETOM ERRHLT ;*RES* HALT ON NON-FATAL ERRORS
JRST BUTTON
QERRGO: SETOM ERRHLT ;*RES* CONTINUE ON NON-FATAL ERRS
JRST BUTTON
QREWRT: SKIPE DDSW ;*RES* IS THIS A DATA DISK
PUSHJ P,REWRIT ;*RES* YES, REWRITE SCREEN
JRST BUTTON
QNEW: PUSHJ P,QNEWS ;*RES* WRITE OUT CURRENT NEWS
JRST BUTTON
QMJH: SETOM MJHSW# ;OCTAL DUMPS FOR JO
JRST BUTTON
QDUM: JRST BUTTON ;*RES* DUMMY SWITCHES ARE NO-OPS
QEXIT: CALL [SIXBIT /EXIT/] ; SO LONG UNTIL TOMORROW
QMEM: OUTSTR [ASCIZ ⊗ADDRESS ⊗]
INCHRW 11
CAIN 11, "X"
JRST BUTTON
ANDI 11, 17
IMULI 11, =1000
MOVE 10, 11
INCHRW 11
ANDI 11, 17
IMULI 11, =100
ADD 10, 11
INCHRW 11
ANDI 11, 17
IMULI 11, =10
ADD 10, 11
INCHRW 11
ANDI 11, 17
ADD 10, 11
OUTCHR [":"]
MOVE 10, MC0000(10)
PUSHJ P, PMIX
JRST QMEM
QDISP: OUTSTR [ASCIZ ⊗
DISPLAY:
⊗]
OUTSTR [ASCIZ ⊗ EXTIME=⊗]
MOVE 10, EXTIME
PUSHJ P, OUTD1 ;*RES*
OUTSTR [ASCIZ ⊗
PC =⊗]
MOVEI 10,-MC0000(PC) ;*RES*
PUSHJ P, OUTD1 ;*RES*
OUTSTR [ASCIZ ⊗
RA =⊗]
MOVE 10, RA
PUSHJ P, PMIX
OUTSTR [ASCIZ ⊗ RX =⊗]
MOVE 10, RX
PUSHJ P, PMIX
OUTSTR [ASCIZ ⊗ RJ =⊗]
MOVE 10, RJ
PUSHJ P, OUTD1 ;*RES*
JRST BUTTON
POCT: MOVE 13, [POINT 3, 10]
ILDB 11, 13
ADDI 11, 60
OUTCHR 11
TLNE 13, 770000
JRST .-4
OUTSTR [ASCIZ ⊗
⊗]
POPJ P,
PMIX: MOVEI 11, 53
SKIPGE 10
ADDI 11, 2
OUTCHR 11
MOVE 13, [POINT 3, 10, 5]
OUTCHR [" "]
ILDB 11, 13
ADDI 11, 60
OUTCHR 11
ILDB 11, 13
ADDI 11, 60
OUTCHR 11
TLNE 13, 770000
JRST .-10
OUTSTR [ASCIZ ⊗
⊗]
POPJ P,
QSETUP: SETZ 10,
PUSHJ P,RESCN ;*RES* LOOK FOR A SECOND ARG
MOVE 11,RECHAR ;*RES* FOUND ONE
JRST .+5 ;*RES* RESCN SKIPS 2 IF NO ARG
OUTSTR [ASCIZ /INSTRUCTIONS BETWEEN DISPLAY UPDATES: /]
INCHWL 11
SKIPA
INCHRW 11
CAIN 11, 15
JRST .+5
ANDI 11, 17
IMULI 10, =10
ADD 10, 11
JRST .-6
MOVEM 10, UPD0
INCHRW 10
CAIE 10, 12
JRST .-2
JRST BUTTON
QDUMP: SKIPN RUNC
JRST BUTTON
PUSHJ P,RANGE ;*RES* DETERMINE DUMP RANGE
MOVE 11,BMASK ;*RES* DEFAULT IS BYTES
CAIE 10,"/" ;*RES* IS A MODE SPECIFIED?
JRST QDMP1 ;NO
INCHWL 10
CAIE 10,"I" ;INSTRUCTION MODE?
JRST .+3 ;NO
MOVE 11,IMASK
JRST QDMP1
CAIE 10,"B" ;BYTE MODE?
JRST .+3 ;NO
MOVE 11,BMASK
JRST QDMP1
CAIE 10,"D" ;DECIMAL MODE?
JRST .+3 ;NO
MOVE 11,DMASK
JRST QDMP1
PUSHJ P,MSPARS ;GET SPECIAL MASK
MOVE 11,MASK
CAIG 13,5 ;IS MASK SIZE OKAY
JRST QDMP1 ;YES
OUTSTR [ASCIZ /DUMP MASK IS MORE THAT 5 BYTES LONG
/]
JRST QBUTN
QDMP1: MOVEM 11,DFALTM ;STORE DEFAULT MASK
SKIPA
INCHWL 10
CAIE 10,12
JRST .-2
JRST DUMP ;GO TO THE DUMP
QSETPC: PUSHJ P,RESCN ;*RES* LOOK FOR A SECOND ARG
MOVE 10,RECHAR ;*RES* FOUND ONE
JRST .+3 ;*RES* RESCN SKIPS 2 IF NO ARG
OUTSTR [ASCIZ ⊗NEW VALUE FOR P.C. = ⊗]
INCHWL 10
SKIPA 11, [0]
QSPC1: INCHRW 10
CAIN 10, 15
JRST QSPC2
IMULI 11, =10
SUBI 10, 60
ADD 11, 10
JRST QSPC1
QSPC2: INCHRW 10
ADDI 11, MC0000
MOVE PC, 11
JRST BUTTON
COMMENT ⊗ RESCN routine to scan the rest of the line of TTY input looking an
argument. Call is PUSHJ P,RESCN. On return, the first character of
the second argument is in location RECHAR and subsequent TTY inputs
will get the other characters. If there is no second argument on the
line,the routine skips 2 instructions on return.
⊗
RESCN:
PUSH P,10 ;SAVE REGISTER
RESCN1: INCHRW 10 ;READ A CHAR
CAIN 10,15
JRST RESCN2
CAIN 10,12 ;MAYBE A LF
JRST RESCN3 ;YES, GET OUT OF HERE
CAIN 10,40 ;SKIP OVER ANY BLANKS
JRST RESCN1
; We have read to a non-blank, non-CR character
MOVEM 10,RECHAR ;SAVE THE CHARACTER
POP P,10
POPJ P, ;RETURN
; We found a CR before finding a second argument
RESCN2: INCHRW 10
CAIE 10,12 ;READ LF ALSO
JRST .-2
RESCN3: MOVEI 10,2 ;SET TO SKIP 2 ON RETURN
ADDM 10,-1(P)
POP P,10 ;RESTORE REGISTER
POPJ P,
RECHAR: 0